package com.sinog.biz.mapper.havexml;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sinog.core.domain.Department;
import com.sinog.core.domain.SystemCode;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;

/**
 * @desc biz调用basic相关表的通用mapper
 * @author -
 * @date -
 */
public interface DepartmentMapper extends BaseMapper<Department> {

    /**
     * 查询所有子集
     * @param localCode localCode
     * @return List<String>
     */
    List<Department> searchCodeList(@Param("localCode") String localCode);

    /**
     * 获取转监单位
     * @param pid 上级单位
     * @param level 服刑单位(例、01:监狱,02:看守所,05:社矫中心)
     * @param departId 当前用户的departId
     * @return List<Map < String,Object>>
     */
    List<Map<String,Object>> getTransferUnit(
            @Param("pid") String pid,@Param("level") String level,@Param("departId") String departId);

    /**
     * 获取部门
     * @param id 当前部门编号
     * @return Map<String,Object>
     */
    Department getDepartmentById(@Param("id") String id);

    /**
     * 安帮工作资源管理 - 上报协调信息管理 - 上报协调信息管理 - 获取抄送机构需要的下拉框数据
     * @param departId departId
     * @return List<SystemCode>
     */
    List<SystemCode> getDepartmentType(String departId);

    /**
     * 安帮工作资源管理 - 上报协调信息管理 - 上报协调信息管理 - 获取抄送机构需要的下拉框数据
     * @param departId departId
     * @return List<SystemCode>
     */
    List<Map<String,String>> getDepartments(String departId);

    /**
     * 安帮工作资源管理 - 上报协调信息管理 - 上报协调信息管理 - 查看时获取抄送机构需要的下拉框数据
     * @param departId departId
     * @return List<SystemCode>
     */
    List<SystemCode> getDepartmentTypeInfo(String departId);

    /**
     * 数据统计分析 - 数据分析 - 查询id和name(返回当前用户及其子机构用户)
     * @param map map
     * @return List<Map < String,String>>
     */
    List<Map<String,String>> getLevelDepart(@Param("map") Map<String,String> map);

    /**
     * 通过户籍地址查询是否有对应的司法所
     * @param nativevill 户籍街道地址
     * @return Map<String,String>
     */
    Department getDepartIdByNativevill(String nativevill);

    /**
     * 数据统计分析 - 多维数据检索 - 多维数据检索 - 获取监狱单位数据
     * @return List<Map < String,Object>>
     */
    List<Map<String,Object>> getJailList();

    /**
     * 湖南个性化---针对看守所用户进行操作----根据罪犯编号获取tbsys_department中的level信息，看是看守所还是其他
     * @param priNum priNum
     * @return Department
     */
    Department getIdAndLevelByPriNum(String priNum);

    /**
     * 根据罪犯编号查找服刑单位level--衔接失败--监狱管理局上报和司法厅处理使用
     * @param priNum 服刑人员编号
     * @return 服刑单位level
     */
    String selectPdanweiLevelByPriNum(String priNum);

    /**
     * 获取下拉框数据
     * @param departid departid
     * @return List<Map < String,String>>
     */
    List<Map<String,String>> getJyData(@Param("departid") String departid);

    /**
     * 获取首页需要展示数据指标相关部门信息
     * 司法厅、地市司法局、区县司法局、公安厅局、监狱管理局、省社矫、地市社矫、区县社矫
     * @param level 机构级别
     * @param proCode 省份id前两位
     * @return List<Department> 部门集合
     */
    List<String> getSyDepartmentId(@Param("level") String level,@Param("proCode") String proCode);

    /**
     * 查询出要新增的监狱局、社矫总队、地市司法局，最上面的3层
     * @return List
     */
    Integer getThreeId();

    /**
     * 自动添加部门
     * @param departmentMap 部门id map
     * @return int
     */
    int addAutoDepartment(@Param("dmp") Map<String,String> departmentMap);

    //===============>这几个暂时放这，后面移开
    /**
     * 删除自动添加的部门
     * @param suffix 后缀
     * @return int
     */
    int delAutoRegion(@Param("suffix") String suffix);

    /**
     * 删除自动添加的部门
     * @param suffix 后缀
     * @return int
     */
    int delAreaCodeFull(@Param("suffix") String suffix);

    /**
     * 删除自添加价的
     * @param suffix 后缀
     * @return int
     */
    int delAutoDepartment(@Param("suffix") String suffix);

    /**
     * 删除自添加价的
     * @param suffix 后缀
     * @return int
     */
    int delTbsysUserAuto(@Param("suffix") String suffix);

    /**
     * 删除自添加价的
     * @param suffix 后缀
     * @return int
     */
    int delAutoAccount(@Param("suffix") String suffix);

    /**
     * 自动创建账号的时候创建子用户表
     * @param departmentMap 部门id map
     * @return int
     */
    int addAutoTbsysUserChildCache(@Param("dmp") Map<String,String> departmentMap);

    /**
     * 删除用户子用户缓存表
     * @param suffix 后缀
     * @return int
     */
    int delAutoTbsysUserChildCache(@Param("suffix") String suffix);

    /**
     * 修改部门
     * @param department department
     * @param paramMap paramMap
     */
    void updateDepartmentById(@Param("department") Department department,@Param("paramMap")Map<String,String> paramMap);

    /**
     * 查询所有部门信息
     * @return List<Department>
     */
    List<String> selectAllDepartmentIds();
}